const express = require('express');
const router = express.Router();
const userController = require('../../controllers/userController');
const { body, query } = require('express-validator');
const { validateRequest } = require("../../middleware/validationMiddleware");

// 获取用户列表
router.get('/user/page', 
  [
    query('pageNum').isInt({min: 1}).withMessage('页码必须为正整数'),
    query('pageSize').isInt({min: 1, max: 100}).withMessage('每页条数必须为1-100之间的整数'),
    query('username').optional(),
    query('deptId').optional(),
    query('status').optional().isIn([0, 1]).withMessage('状态值无效'),
  ],
  validateRequest,
  userController.getUserList);

// 获取当前用户信息
router.get('/user/me', userController.getCurrentUser);

// 获取用户详情
router.get('/user/:id', userController.getUserById);

// 获取用户表单详情
router.get('/user/:id/form', userController.getUserForm);


// 创建用户
router.post('/user/',
  [
    body('username').notEmpty().withMessage('用户名不能为空'),
    body('password').notEmpty().withMessage('密码不能为空'),
    body('nickname').optional(),
    body('gender').isInt({min: 0, max: 2}).withMessage('性别值无效'),
    body('status').isInt({min: 0, max: 1}).withMessage('状态值无效'),
    body('roleIds').optional().isArray().withMessage('角色ID必须为数组'),
    body('roleIds.*').optional().isInt().withMessage('角色ID必须为整数'),
  ],
  validateRequest,
  userController.createUser
);

// 更新用户
router.put('/user/:id',
  [
    body('nickname').optional(),
    body('gender').optional().isInt({min: 0, max: 2}).withMessage('性别值无效'),
    body('status').optional().isInt({min: 0, max: 1}).withMessage('状态值无效'),
    body('mobile').optional(),
    body('email').optional().isEmail().withMessage('邮箱格式不正确'),
    body('roleIds').optional().isArray().withMessage('角色ID必须为数组'),
    body('roleIds.*').optional().isInt().withMessage('角色ID必须为整数'),
  ],
  validateRequest,
  userController.updateUser
);

// 删除用户
router.delete('/user/:id', userController.deleteUser);

// 分配用户角色
router.post('/user/:userId/roles',
  [
    body('roleIds').isArray().withMessage('角色ID必须为数组'),
  ],
  validateRequest,
  userController.assignUserRoles
);

// 获取用户角色
router.get('/user/:userId/roles', userController.getUserRoles);

// 修改用户密码（管理员）
router.patch('/user/:id/password',
  [
    query('password').notEmpty().withMessage('新密码不能为空')
      .isLength({ min: 6 }).withMessage('新密码长度不能小于6位'),
  ],
  validateRequest,
  userController.updatePassword
);

// 修改用户密码（需要验证旧密码）
router.put('/user/:id/password',
  [
    body('oldPassword').notEmpty().withMessage('旧密码不能为空'),
    body('newPassword').notEmpty().withMessage('新密码不能为空')
      .isLength({ min: 6 }).withMessage('新密码长度不能小于6位'),
  ],
  validateRequest,
  userController.changePassword
);

module.exports = router;